import { uniAPIWrap, asyncUniAPIWrap } from "@/utils/apiWrap";
import type { DBGetOpt } from "../../db.type";

// #ifdef H5
function h5Get(opt: DBGetOpt) {
    let manager = opt.h5Store === "local" ? window.localStorage : window.sessionStorage;
    let res = manager.getItem(opt.key);
    if (opt._type === "sync") {
        return res;
    }
    // 如果是异步, 就 success 返回
    let { success } = opt;
    success && success(res);
}
// #endif

// #ifndef H5
function getAction(opt: DBGetOpt) {
    if (opt._type === "sync") {
        return uniAPIWrap("getStorageSync", opt.key);
    } else {
        let { _type, key, h5Store, ...others } = opt || {};
        asyncUniAPIWrap("getStorage", {
            key: key,
            ...others,
        });
    }
}
// #endif

function get(opt: DBGetOpt) {
    // #ifdef H5
    return h5Get(opt);
    // #endif

    // #ifndef H5
    return getAction(opt);
    // #endif
}

export { get };
